home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / bin / httpd / src / httpd.h < prev    next >
C/C++ Source or Header  |  1995-05-18  |  21KB  |  806 lines

  1. /*
  2.  * httpd.h: header for simple (ha! not anymore) http daemon
  3.  *
  4.  * All code contained herein is covered by the Copyright as distributed
  5.  * in the README file in the main directory of the distribution of 
  6.  * NCSA HTTPD.
  7.  *
  8.  */
  9.  
  10. /* Define one of these according to your system. */
  11. #if defined(SUNOS4)
  12. #define BSD
  13. #undef NO_KILLPG
  14. #undef NO_SETSID
  15. #define FD_BSD
  16. char *crypt(char *pw, char *salt);
  17.  
  18. #elif defined(SOLARIS2)
  19. #undef BSD
  20. #define NO_KILLPG
  21. #undef NO_SETSID
  22. #define FD_BSD
  23. #define bzero(a,b) memset(a,0,b)
  24. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  25. #define JMP_BUF sigjmp_buf
  26.  
  27. #elif defined(IRIX)
  28. #undef BSD
  29. #undef NO_KILLPG
  30. #undef NO_SETSID
  31. #define FD_BSD
  32. #define JMP_BUF sigjmp_buf
  33.  
  34. #elif defined(HPUX)
  35. #undef BSD
  36. #define NO_KILLPG
  37. #undef NO_SETSID
  38. #define FD_BSD
  39. #ifndef _HPUX_SOURCE
  40. #define _HPUX_SOURCE
  41. #endif
  42. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  43. #define JMP_BUF sigjmp_buf
  44.  
  45. #elif defined(AIX)
  46. #undef BSD
  47. #undef NO_KILLPG
  48. #undef NO_SETSID
  49. #define FD_BSD
  50. #define NEED_SELECT_H
  51. #define JMP_BUF sigjmp_buf
  52.  
  53. #elif defined(ULTRIX)
  54. #define BSD
  55. #define FD_BSD
  56. #undef NO_KILLPG
  57. #undef NO_SETSID
  58. #define ULTRIX_BRAIN_DEATH
  59. #define NEED_STRDUP
  60. /* If you have Ultrix 4.3, and are using cc, const is broken */
  61. #ifndef __ultrix__ /* Hack to check for pre-Ultrix 4.4 cc */
  62. #define const /* Not implemented */
  63. #endif
  64. #define JMP_BUF sigjmp_buf
  65.  
  66. #elif defined(OSF1)
  67. #define BSD
  68. #define FD_BSD
  69. #undef NO_KILLPG
  70. #undef NO_SETSID
  71. #define JMP_BUF sigjmp_buf
  72.  
  73. #elif defined(SEQUENT)
  74. #define BSD
  75. #undef NO_KILLPG
  76. #define NO_SETSID
  77. #define NEED_STRDUP
  78. #define tolower(c) (isupper(c) ? tolower(c) : c)
  79.  
  80. #elif defined(NeXT)
  81. #define BSD
  82. #define FD_BSD
  83. #undef NO_KILLPG
  84. #define NO_SETSID
  85. #define NEED_STRDUP
  86. #undef _POSIX_SOURCE
  87. #ifndef S_IXUSR
  88. #define S_IXUSR _S_IXUSR
  89. #endif
  90. #ifndef S_IXGRP
  91. #define S_IXGRP 0000010
  92. #endif
  93. #ifndef S_IXOTH
  94. #define S_IXOTH 0000001
  95. #endif
  96. #ifndef S_IRUSR
  97. #define S_IRUSR _S_IRUSR
  98. #endif
  99. #ifndef S_IWUSR
  100. #define S_IWUSR _S_IWUSR
  101. #endif
  102. #ifndef S_IRGRP
  103. #define S_IRGRP 0000040
  104. #endif
  105. #ifndef S_IROTH
  106. #define S_IROTH 0000004
  107. #endif
  108. #ifndef S_IWGRP
  109. #define S_IWGRP 0000020
  110. #endif
  111. #ifndef S_IWOTH
  112. #define S_IWOTH 0000002
  113. #endif
  114. #ifndef S_IRWXU
  115. #define S_IRWXU 0000700
  116. #endif
  117. #ifndef S_IRWXG
  118. #define S_IRWXG 0000070
  119. #endif
  120. #ifndef S_IRWXO
  121. #define S_IRWXO 0000007
  122. #endif
  123. #ifndef S_ISBLK
  124. #define S_ISBLK(m)    (((m)&(_S_IFMT)) == (_S_IFBLK))
  125. #endif
  126. #ifndef S_ISCHR
  127. #define S_ISCHR(m)    (((m)&(_S_IFMT)) == (_S_IFCHR))
  128. #endif
  129. #ifndef S_ISDIR
  130. #define S_ISDIR(m)      (((m)&(_S_IFMT)) == (_S_IFDIR))
  131. #endif
  132. #ifndef S_ISFIFO
  133. #define S_ISFIFO(m)    (((m)&(_S_IFMT)) == (_S_IFIFO))
  134. #endif
  135. #ifndef S_ISREG
  136. #define S_ISREG(m)      (((m)&(_S_IFMT)) == (_S_IFREG))
  137. #endif
  138. #define STDIN_FILENO  0
  139. #define STDOUT_FILENO 1
  140. #define STDERR_FILENO 2
  141. #define waitpid(a,b,c) wait4(a,b,c,NULL)
  142. typedef int pid_t;
  143. typedef int mode_t;
  144. #define JMP_BUF jmp_buf
  145.  
  146. #elif defined(LINUX)
  147. #define NO_PASS
  148. #undef BSD
  149. #undef NO_KILLPG
  150. #undef NO_SETSID
  151. #undef NEED_STRDUP
  152. #define FD_SET __FD_SET
  153. #define FD_ZERO __FD_ZERO
  154. #define FD_ISSET __FD_ISSET
  155. #define JMP_BUF sigjmp_buf
  156.  
  157. #elif defined(NETBSD)
  158. #define BSD
  159. #define FD_BSD
  160. #define FD_BSDRENO
  161.  
  162. #elif defined(SCO)
  163. #undef BSD
  164. #undef NO_KILLPG
  165. #undef NO_SETSID
  166. #define NEED_INITGROUPS
  167.  
  168. #elif defined(SCO3)
  169. #undef BSD
  170. #define FD_SYSV
  171. #define NEED_SPIPE
  172. #undef NO_KILLPG
  173. #undef NO_SETSID
  174. #define NEED_INITGROUPS
  175. #define CALL_TZSET
  176. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  177. #define JMPBUF sigjmp_buf
  178.  
  179.  
  180. #elif defined(CONVEXOS)
  181. #define BSD
  182. #define NEED_STRDUP
  183. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  184.  
  185. #elif defined(AUX)
  186. #define BSD
  187. #undef NO_KILLPG
  188. #undef NO_SETSID
  189. #define NEED_STRDUP
  190. #ifdef _POSIX_SOURCE
  191. # define JMP_BUF sigjmp_buf
  192. #else
  193. # define siglongjmp longjmp
  194. # define sigsetjmp setjmp
  195. # define JMP_BUF jmp_buf
  196. # define STDIN_FILENO 0
  197. # define STDOUT_FILENO 1
  198. # define STDERR_FILENO 2
  199. #endif
  200.  
  201. #elif defined(SVR4)
  202. #define NO_KILLPG
  203. #undef  NO_SETSID
  204. #undef NEED_STRDUP
  205. #define NEED_STRCASECMP
  206. #define NEED_STRNCASECMP
  207. #define bzero(a,b) memset(a,0,b)
  208. #define JMP_BUF sigjmp_buf
  209. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  210.  
  211. #elif defined(__NetBSD__)
  212. #define BSD
  213. #define FD_BSD
  214. #define FD_BSDRENO
  215. #undef NO_KILLPG
  216. #undef NO_SETSID
  217.  
  218. #elif defined(UTS21)
  219. #undef BSD
  220. #undef NO_KILLPG
  221. #define NO_SETSID
  222. #define NEED_WAITPID
  223. #define STDIN_FILENO 0
  224. #define STDOUT_FILENO 1
  225. #define STDERR_FILENO 2
  226. #define strftime(buf,bufsize,fmt,tm)    ascftime(buf,fmt,tm)
  227. #include <sys/types.h>
  228.  
  229. #elif defined(APOLLO)
  230. #define BSD
  231. #undef NO_KILLPG
  232. #undef NO_SETSID
  233. #define timezone    _bky_timezone
  234.  
  235. #elif defined(ATTSVR3)
  236. #define NO_SETSID
  237. #undef BSD
  238. #undef NO_KILLPG
  239. #define NO_STRFTIME
  240. #undef NEED_STRDUP
  241. #undef NEED_STRCASECMP
  242. #undef NEED_STRNCASECMP
  243. #define SIGCHLD SIGCLD
  244. #define STDIN_FILENO fileno(stdin)
  245. #define STDOUT_FILENO fileno(stdout)
  246. #define STDERR_FILENO fileno(stderr)
  247. #ifndef S_ISDIR
  248. #define S_ISDIR(m)    (((m)&(S_IFMT)) == (S_IFDIR))
  249. #endif
  250. #ifndef S_ISREG
  251. #define S_ISREG(m)    (((m)&(S_IFMT)) == (S_IFREG))
  252. #endif
  253. #define lstat stat
  254. #define strftime(buf,bufsize,fmt,tm)    ascftime(buf,fmt,tm)
  255. #define getwd(d) getcwd(d,MAX_STRING_LEN)
  256. #define readlink(a,b,c) -1
  257. typedef int uid_t;
  258. typedef int gid_t;
  259. typedef int pid_t;
  260. extern struct group *getgrnam();
  261. extern char *getenv();
  262.  
  263. #elif defined(__QNX__)
  264. #define _POSIX_SOURCE
  265. #define NEED_SELECT_H
  266. #define NEED_INITGROUPS
  267. #define wait3(a,b,c) waitpid(-1,a,b)
  268.  
  269.  
  270.  
  271. /* Unknown system - Edit these to match */
  272. #else
  273. /* BSD is whether your system uses BSD calls or System V calls. */
  274. #define BSD
  275. /* NO_KILLPG is set on systems that don't have killpg */
  276. #undef NO_KILLPG
  277. /* NO_SETSID is set on systems that don't have setsid */
  278. #undef NO_SETSID
  279. /* NEED_STRDUP is set on stupid systems that don't have strdup. */
  280. #undef NEED_STRDUP
  281. /* NO_PASS is set on systems that don't allow file descriptor passing */
  282. #undef NO_PASS
  283. /* FD_BSD is set on systems which pass file descriptors in a BSD way */
  284. #undef FD_BSD
  285. /* FD_BSDRENO is for BSD 4.3RENO systems for file descriptor passing */
  286. #undef FD_BSDRENO
  287. /* FD_SYSV is set on systems which pass file descriptor in a SYSV way */
  288. #undef FD_SYSV
  289. /* NEED_SPIPE is set on systems which are using FD_SYSV but don't have
  290.    socketpair */
  291. #undef NEED_SPIPE
  292. /* CALL_TZSET on systems which need to call tzset() before detaching from
  293.    the shell (some systems don't keep environment variables after detach) */
  294. #undef CALL_TZSET
  295. #endif
  296.  
  297. /* If we haven't set anything about file descriptor passing, set NO_PASS */
  298. #if !defined(FD_BSD) && !defined(FD_SYSV) && !defined(NO_PASS)
  299. #define NO_PASS
  300. #endif
  301.  
  302. /*
  303.  * The particular directory style your system supports. If you have dirent.h
  304.  * in /usr/include (POSIX) or /usr/include/sys (SYSV), #include 
  305.  * that file and define DIR_TYPE to be dirent. Otherwise, if you have 
  306.  * /usr/include/sys/dir.h, define DIR_TYPE to be direct and include that
  307.  * file. If you have neither, I'm confused.
  308.  */
  309.  
  310. #include <sys/types.h>
  311.  
  312. #if !defined(NeXT) && !defined(CONVEXOS) && !defined(APOLLO)
  313. #if defined(ATTSVR3)
  314. #include <malloc.h>
  315. #endif
  316. #include <dirent.h>
  317. #define DIR_TYPE dirent
  318. #else
  319. #include <sys/dir.h>
  320. #define DIR_TYPE direct
  321. #endif
  322.  
  323. /* ----------------------------- config dir ------------------------------ */
  324.  
  325. /* Define this to be the default server home dir. Anything later in this
  326.  * file with a relative pathname will have this added.
  327.  */
  328. #define HTTPD_ROOT "/usr/local/etc/httpd"
  329.  
  330. /* Root of server */
  331. #define DOCUMENT_LOCATION "/usr/local/etc/httpd/htdocs"
  332.  
  333. /* Max. number of aliases */
  334. #define MAX_ALIASES 20
  335.  
  336. /* Max. number of security defines */
  337. #define MAX_SECURITY 50
  338.  
  339. /* Default administrator's address */
  340. #define DEFAULT_ADMIN "[no address given]"
  341.  
  342. /* 
  343.  * --------- You shouldn't have to edit anything below this line ----------
  344.  *
  345.  * Any modifications to any defaults not defined above should be done in the 
  346.  * respective config. file. 
  347.  *
  348.  */
  349.  
  350.  
  351. /* -------------- Port number for server running standalone --------------- */
  352.  
  353. #define DEFAULT_PORT 80
  354.  
  355. /* --------- Default user name and group name running standalone ---------- */
  356. /* --- These may be specified as numbers by placing a # before a number --- */
  357.  
  358. #define DEFAULT_USER "#-1"
  359. #define DEFAULT_GROUP "#-1"
  360.  
  361. /* The name of the log files */
  362. #define DEFAULT_XFERLOG "logs/access_log"
  363. #define DEFAULT_AGENTLOG "logs/agent_log"
  364. #define DEFAULT_REFERERLOG "logs/referer_log"
  365. #define DEFAULT_ERRORLOG "logs/error_log"
  366. #define DEFAULT_PIDLOG "logs/httpd.pid"
  367.  
  368. /* The referer documents to ignore */
  369. #define DEFAULT_REFERERIGNORE ""
  370.  
  371. /* Define this to be what your HTML directory content files are called */
  372. #define DEFAULT_INDEX "index.html"
  373.  
  374. /* Define this to 1 if you want fancy indexing, 0 otherwise */
  375. #define DEFAULT_INDEXING 0
  376.  
  377. /* Define this to be what type you'd like returned for files with unknown */
  378. /* suffixes */
  379. #define DEFAULT_TYPE "text/html"
  380.  
  381. /* Define this to be what your per-directory security files are called */
  382. #define DEFAULT_ACCESS_FNAME ".htaccess"
  383.  
  384. /* The name of the server config file */
  385. #define SERVER_CONFIG_FILE "conf/httpd.conf"
  386.  
  387. /* The name of the document config file */
  388. #define RESOURCE_CONFIG_FILE "conf/srm.conf"
  389.  
  390. /* The name of the MIME types file */
  391. #define TYPES_CONFIG_FILE "conf/mime.types"
  392.  
  393. /* The name of the access file */
  394. #define ACCESS_CONFIG_FILE "conf/access.conf"
  395.  
  396. /* Whether we should enable rfc931 identity checking */
  397. #define DEFAULT_RFC931 0
  398. /* The default directory in user's home dir */
  399. #define DEFAULT_USER_DIR "public_html"
  400.  
  401. /* The default path for CGI scripts if none is currently set */
  402. #define DEFAULT_PATH "/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin"
  403.  
  404. /* The path to the Bourne shell, for parsed docs */
  405. #define SHELL_PATH "/bin/sh"
  406.  
  407. /* The default string lengths */
  408. #define MAX_STRING_LEN 256
  409. #define HUGE_STRING_LEN 8192
  410.  
  411. /* The timeout for waiting for messages */
  412. #define DEFAULT_TIMEOUT 1200
  413.  
  414. /* The size of the server's internal read-write buffers */
  415. #define IOBUFSIZE 8192
  416.  
  417. /* The number of header lines we will accept from a client */
  418. #define MAX_HEADERS 200
  419.  
  420. /* Hi Roy. */
  421. /* #define HTTP_TIME_FORMAT "%A, %d-%b-%y %T GMT" */
  422. /* HTTP/1.0 specifies we use RFC 822 type date strings, so here we do */
  423. /* RFC 1123 format for date */
  424. #define HTTP_TIME_FORMAT "%a, %d %b %Y %T GMT" 
  425.  
  426. /* ------------------------------ error types ------------------------------ */
  427.  
  428. #define SERVER_VERSION "NCSA/1.4.1"
  429. #define SERVER_PROTOCOL "HTTP/1.0"
  430. #define SERVER_SUPPORT "httpd@void.ncsa.uiuc.edu"
  431.  
  432. #define DOCUMENT_FOLLOWS 200
  433. #define REDIRECT 302
  434. #define REDIRECT_LOCAL 3020
  435. #define USE_LOCAL_COPY 304
  436. #define BAD_REQUEST 400
  437. #define AUTH_REQUIRED 401
  438. #define FORBIDDEN 403
  439. #define NOT_FOUND 404
  440. #define SERVER_ERROR 500
  441. #define NOT_IMPLEMENTED 501
  442. #define NO_MEMORY 6992
  443. #define CONF_ERROR 6993
  444.  
  445. #define METHODS 4
  446. #define M_GET 0
  447. #define M_PUT 1
  448. #define M_POST 2
  449. #define M_DELETE 3
  450.  
  451. /* Object types */
  452. #define REDIRECT_URL -1
  453. #define STD_DOCUMENT 0
  454. #define SCRIPT_NCSA 1
  455. #define SCRIPT_CGI 2
  456.  
  457. #define OPT_NONE 0
  458. #define OPT_INDEXES 1
  459. #define OPT_INCLUDES 2
  460. #define OPT_SYM_LINKS 4
  461. #define OPT_EXECCGI 8
  462. #define OPT_UNSET 16
  463. #define OPT_INCNOEXEC 32
  464. #define OPT_SYM_OWNER 64
  465. #define OPT_ALL (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI)
  466.  
  467. #define OR_NONE 0
  468. #define OR_LIMIT 1
  469. #define OR_OPTIONS 2
  470. #define OR_FILEINFO 4
  471. #define OR_AUTHCFG 8
  472. #define OR_INDEXES 16
  473. #define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)
  474.  
  475. #define CGI_MAGIC_TYPE "application/x-httpd-cgi"
  476. #define INCLUDES_MAGIC_TYPE "text/x-server-parsed-html"
  477.  
  478. /* For directory indexing */
  479. #define BY_PATH 0
  480. #define BY_TYPE 1
  481. #define BY_ENCODING 2
  482.  
  483. #define FANCY_INDEXING 1
  484. #define ICONS_ARE_LINKS 2
  485. #define SCAN_HTML_TITLES 4
  486. #define SUPPRESS_LAST_MOD 8
  487. #define SUPPRESS_SIZE 16
  488. #define SUPPRESS_DESC 32
  489.  
  490. #include <stdio.h>
  491. #ifndef ATTSVR3
  492. #include <stdlib.h>
  493. #include <sys/wait.h>
  494. #endif
  495. #include <string.h>
  496. #include <sys/stat.h>
  497. #include <sys/file.h>
  498. #include <sys/socket.h>
  499. #ifdef NEED_SELECT_H
  500. #include <sys/select.h>
  501. #endif
  502. #include <ctype.h>
  503. #include <netinet/in.h>
  504. #include <netdb.h>
  505. #include <sys/ioctl.h>
  506. #include <arpa/inet.h>  /* for inet_ntoa */
  507. #include <time.h>  /* for ctime */
  508. #include <signal.h>
  509. #include <errno.h>
  510. #include <pwd.h>
  511. #include <grp.h>
  512. #include <fcntl.h>
  513.  
  514. #ifndef NeXT
  515. #include <unistd.h>
  516. #endif
  517.  
  518. #ifdef ultrix
  519. #define ULTRIX_BRAIN_DEATH
  520. #endif
  521.  
  522. #ifndef JMP_BUF
  523. #define JMP_BUF sigjmp_buf
  524. #endif
  525.  
  526.  
  527. /* Just in case your linefeed isn't the one the other end is expecting. */
  528. #define LF 10
  529. #define CR 13
  530.  
  531. /* For access control */
  532. #define DENY_THEN_ALLOW 0
  533. #define ALLOW_THEN_DENY 1
  534. #define MUTUAL_FAILURE 2
  535.  
  536. /* Struct shared by access and auth */
  537. typedef struct {
  538.     char *d;
  539.     char opts;
  540.     char override;
  541.  
  542.     int order[METHODS];
  543.  
  544.     int num_allow[METHODS];
  545.     char *allow[METHODS][MAX_SECURITY];
  546.     int num_auth[METHODS];
  547.     char *auth[METHODS][MAX_SECURITY];
  548.  
  549.     char *auth_type;
  550.     char *auth_name;
  551.     char *auth_pwfile;
  552.     char *auth_grpfile;
  553.  
  554.     int num_deny[METHODS];
  555.     char *deny[METHODS][MAX_SECURITY];
  556. } security_data;
  557.  
  558. /* Global, global, who's got the globals? */
  559.  
  560. /* Server config */
  561. extern int standalone;
  562. extern int port;
  563. extern uid_t user_id;
  564. extern gid_t group_id;
  565. extern char server_root[MAX_STRING_LEN];
  566. extern char annotation_server[MAX_STRING_LEN];  /* SSG 4/4/95 */
  567. extern char error_fname[MAX_STRING_LEN];
  568. extern char xfer_fname[MAX_STRING_LEN];
  569. extern char agent_fname[MAX_STRING_LEN];
  570. extern char referer_fname[MAX_STRING_LEN];
  571. extern char pid_fname[MAX_STRING_LEN];
  572. extern char server_admin[MAX_STRING_LEN];
  573. extern char *server_hostname;
  574. extern char server_confname[MAX_STRING_LEN];
  575. extern char srm_confname[MAX_STRING_LEN];
  576. extern char access_confname[MAX_STRING_LEN];
  577. extern char types_confname[MAX_STRING_LEN];
  578. extern int timeout;
  579. extern int do_rfc931;
  580.  
  581.  
  582. /* Document config */
  583. extern char user_dir[MAX_STRING_LEN];
  584. extern char index_name[MAX_STRING_LEN];
  585. extern char access_name[MAX_STRING_LEN];
  586. extern char document_root[MAX_STRING_LEN];
  587. extern char default_type[MAX_STRING_LEN];
  588. extern char local_default_type[MAX_STRING_LEN];
  589. extern char default_icon[MAX_STRING_LEN];
  590. extern char local_default_icon[MAX_STRING_LEN];
  591. extern char blank_icon[MAX_STRING_LEN];
  592. extern int fancy_indexing;
  593. extern char readme_fname[MAX_STRING_LEN];
  594.  
  595. /* Security config */
  596. extern int num_sec;
  597. extern security_data sec[MAX_SECURITY];
  598.  
  599. /* Auth config */
  600. extern char *auth_type;
  601. extern char *auth_name;
  602. extern char *auth_pwfile;
  603. extern char *auth_grpfile;
  604. extern char user[MAX_STRING_LEN];
  605. extern char groupname[MAX_STRING_LEN];
  606.  
  607.  
  608. /* Request information */
  609. extern int assbackwards;
  610. extern int header_only;
  611. extern char *remote_host;
  612. extern char *remote_ip;
  613. extern char *remote_name;
  614. extern char *remote_logname;
  615. extern int allow;
  616. extern char allow_options;
  617. extern int num_includes;
  618. extern int dirs_in_alias;
  619.  
  620. /* MIME */
  621. extern char auth_line[MAX_STRING_LEN];
  622. extern int content_length;
  623. extern char content_type[MAX_STRING_LEN];
  624. extern char content_encoding[MAX_STRING_LEN];
  625. extern char location[MAX_STRING_LEN];
  626. extern char **in_headers_env;
  627.  
  628. /* http_log */
  629. extern FILE *error_log;
  630. extern int bytes_sent;
  631. extern int status;
  632.  
  633. /* Function prototypes. */
  634.  
  635. /* http_config */
  636. void read_config();
  637. void parse_htaccess(char *dir, char override, FILE *out);
  638. int get_pw(char *user, char *pw, FILE *errors);
  639. int in_group(char *user, char *group);
  640. int init_group(char *grpfile, FILE *out);
  641. void kill_group();
  642.  
  643. /* http_alias */
  644. void reset_aliases();
  645. void dump_aliases();
  646. void add_alias(char *f, char *r, int is_script);
  647. void add_redirect(char *f, char *url);
  648. int translate_name(char *name,FILE *fd);
  649. void unmunge_name(char *name);
  650. void save_aliases();
  651. void reset_to_saved_aliases();
  652.  
  653. /* http_request */
  654. void process_request(int in, FILE *out);
  655. long send_fd(FILE *f, FILE *fd, void (*onexit)());
  656. void send_fd_timed_out();
  657. int find_script(char *method, char *name, char *args, int in, FILE *out);
  658.  
  659. /* http_get */
  660. void send_cgi(char *method, char *file, char *path_args, char *args,
  661.           struct stat *finfo, int in, FILE *fd);
  662. void send_file(char *file, FILE *fd, struct stat *fi, 
  663.                char *path_args, char *args);
  664. void process_include(FILE *f, FILE *fd, char *incstring, char *args);
  665. void send_node(char *name, char *args, int in, FILE *fd);
  666. void process_get(int in, FILE *out, char *m, char *url, char *args);
  667.  
  668. /* http_post */
  669. void post_node(char *name, char *args, int in, FILE *out);
  670.  
  671. /* http_put */
  672. void put_node(char *name, char *args, int in, FILE *out);
  673.  
  674. /* http_delete */
  675. void delete_node(char *name, char *args, int in, FILE *out);
  676.  
  677. /* http_script */
  678. void exec_cgi_script(char *method, char *path, char *args, int in, FILE *out);
  679. int cgi_stub(char *method, char *path, char *path_args, char *args,
  680.              char **env, struct stat *finfo, int in, FILE *out);
  681. void exec_get_NCSA(char *path, char *args, int in, FILE *fd);
  682. void exec_post_NCSA(char *path, char *args, int in, FILE *out);
  683. char **add_common_vars(char **env, FILE *out);
  684. void get_path_info(char *path, char *path_args, FILE *out, 
  685.                    struct stat *finfo);
  686.  
  687. /* http_dir */
  688. void index_directory(char *name, FILE *fd);
  689. void add_icon(int type, char *icon, char *to, char *path, FILE *out);
  690. void add_alt(int type, char *alt, char *to, char *path, FILE *out);
  691. void add_desc(int type, char *desc, char *to, char *path, FILE *out);
  692. void add_ignore(char *ext, char *path, FILE *out);
  693. void add_header(char *name, char *path, FILE *out);
  694. void add_readme(char *name, char *path, FILE *out);
  695. void add_opts(char *optstr, char *path, FILE *out);
  696. void add_opts_int(int opts, char *path, FILE *out);
  697. void send_size(size_t size, FILE *fd);
  698.  
  699. void init_indexing();
  700. void kill_indexing();
  701.  
  702. /* http_log */
  703. void record_request(char *cmd_line);
  704. void log_error(char *err);
  705. void log_error_noclose(char *err);
  706. void log_reason(char *reason, char *file);
  707. int die(int type, char *err_string, FILE *fd);
  708. void open_logs();
  709. void close_logs();
  710. void begin_http_header(FILE *fd, const char *msg); 
  711. void error_log2stderr();
  712. void log_transaction();
  713. void htexit(int status, FILE *out);
  714.  
  715. /* http_mime */
  716. void get_mime_headers(int fd, FILE *out, char* url);
  717. void init_header_vars();
  718. void send_http_header(FILE *fd);
  719. void set_content_type(char *fn);
  720. int set_last_modified(time_t t, FILE *out);
  721. void probe_content_type(char *fn);
  722. int scan_script_header(FILE *f, FILE *fd);
  723. void add_type(char *fn, char *t,FILE *out);
  724. void add_encoding(char *fn, char *t,FILE *out);
  725. void set_content_length(int l);
  726. void dump_types();
  727. void init_mime();
  728. void kill_mime();
  729. int is_content_type(char *type);
  730. void dump_default_header(FILE *fd);
  731.  
  732. /* http_access */
  733. void evaluate_access(char *path, struct stat *finfo,int m, int *allow, 
  734.                             char *op, FILE *out);
  735. void kill_security();
  736.  
  737. /* http_auth */
  738. void check_auth(security_data *s, int m, FILE *out);
  739.  
  740.  
  741. /* http_include */
  742. void send_parsed_file(char *file, FILE *fd, char *path_args, char *args,
  743.                       int noexec);
  744.  
  745. /* util */
  746. void inststr(char *dst[], int argc, char *src);
  747. void chdir_file(char *file);
  748. void http2cgi(char *w);
  749. int later_than(struct tm *tms, char *i);
  750. int strcmp_match(char *str, char *exp);
  751. int is_matchexp(char *str);
  752. void strsubfirst(int start,char *dest, char *src);
  753. void make_full_path(char *src1,char *src2,char *dst);
  754. int is_directory(char *name);
  755. int is_url(char *u);
  756. void getparents(char *name);
  757. void no2slash(char *name);
  758. uid_t uname2id(char *name);
  759. gid_t gname2id(char *name);
  760. int getline(char *s, int n, int f, unsigned int timeout);
  761. int eat_ws (FILE* fp);
  762. int cfg_getline(char *s, int n, FILE *f);
  763. void getword(char *word, char *line, char stop);
  764. void cfg_getword(char *word, char *line);
  765. void get_remote_host(int fd);
  766. char *get_time();
  767. char *gm_timestr_822(time_t t);
  768. char *ht_time(time_t t, char *fmt, int gmt);
  769. struct tm *get_gmtoff(long *tz);
  770. void make_dirstr(char *s, int n, char *d);
  771. int count_dirs(char *path);
  772. void strcpy_dir(char *d, char *s);
  773. void unescape_url(char *url);
  774. void escape_url(char *url);
  775. void escape_shell_cmd(char *cmd);
  776. void plustospace(char *str);
  777. void spacetoplus(char *str);
  778. void str_tolower(char *str);
  779. void uudecode(char *s,unsigned char *d,int dl);
  780. #ifdef NEED_STRDUP
  781. char *strdup (char *str);
  782. #endif
  783. #ifdef NEED_STRCASECMP
  784. int strcasecmp(const char *s1, const char *s2);
  785. #endif
  786. #ifdef NEED_STRNCASECMP
  787. int strncasecmp(const char *s1, const char *s2, int n);
  788. #endif
  789. char *make_env_str(char *n, char *v, FILE *out);
  790. char **new_env(char **env, int to_add, int *pos);
  791. void free_env(char **env);
  792. int ind(char *s, char c);
  793. int rind(char *s, char c);
  794. void construct_url(char *d, char *s);
  795. void get_local_host();
  796. int get_portnum(int sd,FILE *out);
  797. int can_exec(struct stat *finfo);
  798. #ifdef NEED_INITGROUPS
  799. int initgroups(const char *name, gid_t basegid);
  800. #endif
  801. char *get_remote_logname(FILE *fd);
  802. char *rfc931(struct sockaddr_in *rmt_sin,struct sockaddr_in *our_sin);
  803. void strncpy_dir(char *d, char *s, int n);
  804. void lim_strcpy(char *d, char *s, int n);
  805.  
  806.